package co.kr.bettersoft.carrotmerchantmobile.activity;
/**
 * MainNotice
 * 메인2. 공지사항
 *   웹뷰.
 */

import org.apache.http.util.EncodingUtils;

import co.kr.bettersoft.carrotmerchantmobile.common.CommonConstant;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;
import android.widget.Toast;

public class MainNotice extends Activity {

	String TAG = "MainNotice";

	int app_end = 0;	// 뒤로가기 버튼으로 닫을때 2번만에 닫히도록

	WebView noticeWebView;

	String loadingURL = CommonConstant.mainNoticeUrl;		// http://www.mcarrot.net/mMobileMerchantNoticeBoardList.do
	String postData = "";

	// 진행바
	ProgressBar pb1;		// 중단 로딩 진행바

	static String countryCode;
	static String languageCode;

	Boolean nowLoading = false;			// 공지 가져오는 중에 재 요청 안하도록
	Boolean webPageLoaded = false;		// 공지 갱신없이 한번만 통신하도록 

	Boolean connected;	// 통신상태

	// 핸들러
	Handler handler = new Handler(){
		@Override
		public void handleMessage(Message msg){
			try{
				Bundle b = msg.getData();		
				if(b.getInt("order")==1){
					// 프로그래스바 실행
					if(pb1==null){
						pb1=(ProgressBar) findViewById(R.id.main_notice_progressbar1);
					}
					pb1.setVisibility(View.VISIBLE);
				}else if(b.getInt("order")==2){
					// 프로그래스바  종료
					if(pb1==null){
						pb1=(ProgressBar) findViewById(R.id.main_notice_progressbar1);
					}
					pb1.setVisibility(View.INVISIBLE);
				}
				if(b.getInt("showErrToast")==1){
					Toast.makeText(MainNotice.this, getString(R.string.failed_to_open_page), Toast.LENGTH_SHORT).show();
					// 페이지를 불러오는데 실패했습니다.\n잠시후 다시 시도해주시기 바랍니다.	

				}
			}catch(Exception e){
				e.printStackTrace();
			}
		}
	};
	@Override
	public void onCreate(Bundle savedInstanceState) {
		Log.w(TAG,"onCreate");
		super.onCreate(savedInstanceState);

		requestWindowFeature(Window.FEATURE_NO_TITLE );	// 타이틀바 제거
		setContentView(R.layout.main_notice);
		noticeWebView = (WebView) findViewById(R.id.notice_webview);

		noticeWebView.setWebViewClient(new MyWebViewClient());
		noticeWebView.setWebChromeClient(new MyWebChromeClient());  // MyWebChromeClient 지정         -- javascript 사용 됨. 
		noticeWebView.addJavascriptInterface(new AndroidBridge(), "hybrid");
		//		noticeWebView.getSettings().setJavaScriptEnabled(true);
		WebSettings webSet = noticeWebView.getSettings();			// --->  load 전에 설정을 줌.
		//		// JavaScript 허용.
		webSet.setJavaScriptEnabled(true);
		// 확대/축소 금지. - 웹에서 차단함.
		//		webSet.setSupportZoom(true);
		//		webSet.setBuiltInZoomControls(true);
	}
	/**
	 * onResume
	 *  액티비티 리쥼시 웹뷰를 로드한다
	 *
	 * @param
	 * @param
	 * @return
	 */
	@Override
	public void onResume(){
		super.onResume();
		countryCode = MainTabs.countryCode;
		languageCode = MainTabs.languageCode;
		app_end = 0;
		Log.d(TAG,"webPageLoaded:"+webPageLoaded+"//nowLoading:"+nowLoading);
		if(!webPageLoaded && !nowLoading){
			nowLoading = true;
			postData = "Merchant-Language="+languageCode+"&Merchant-Country="+countryCode;				// 파라미터 : Merchant-Language / Merchant-Country
			noticeWebView.postUrl(loadingURL, EncodingUtils.getBytes(postData, "BASE64"));
			//				noticeWebView.getSettings().setJavaScriptEnabled(true);
		}
	}


	// 비동기 실행. 웹뷰로 공지 화면
	/**
	 * backgroundNotice
	 *  웹뷰로 공지화면을 로드한다
	 *
	 * @param
	 * @param
	 * @return
	 */
	public class backgroundNotice extends  AsyncTask<Void, Void, Void> { 
		@Override protected void onPostExecute(Void result) {  
		} 
		@Override protected void onPreExecute() {  
		} 
		@Override protected Void doInBackground(Void... params) {  
			Log.w(TAG,"backgroundNotice");
			runOnUiThread(new Runnable(){
				public void run(){
					postData = "Merchant-Language="+languageCode+"&Merchant-Country="+countryCode;				// 파라미터 : Merchant-Language / Merchant-Country
					noticeWebView.postUrl(loadingURL, EncodingUtils.getBytes(postData, "BASE64"));
					noticeWebView.getSettings().setJavaScriptEnabled(true);
				}
			});
			return null; 
		}
	}
	/**
	 * Bridge Class
	 * 웹페이지로부터 요청을 받아서 처리한다.
	 */
	private class AndroidBridge {
		//		// 액티비티 종료
		//		public void finishActivity() {
		//			handler.post(new Runnable() {
		//				public void run() {
		//					finish();
		//				}
		//			});
		//		}
	}

	/**
	 * MyWebViewClient
	 * 페이지 로드, 완료 이벤트발생 가능한 웹뷰 클라이언트
	 *
	 */
	private class MyWebViewClient extends WebViewClient {
		public boolean shouldOverrideUrlLoading(WebView view, String url) {
			view.loadUrl(url);
			return true;
		}
		/**
		 * onPageFinished
		 * 로딩 끝나면 프로그래스바 숨기고 재로딩 가능하도록한다
		 *
		 * @param view
		 * @param url
		 * @return
		 */
		@Override
		public void onPageFinished(WebView view, String url) {
			super.onPageFinished(view, url);
			hidePb();
			webPageLoaded = true;
			nowLoading = false;
		}
		/**
		 * onPageStarted
		 * 웹뷰 로딩 시작하면 시간 재서 로딩 안되면 멈추고 알린다.
		 *
		 * @param view
		 * @param url
		 * @param favicon
		 * @return
		 */
		@Override
		public void onPageStarted(WebView view, String url, Bitmap favicon) {
			super.onPageStarted(view, url, favicon);
			showPb();
			new Thread(new Runnable() {
				@Override
				public void run() {
					try {		// 제한시간 슬립
						Thread.sleep(CommonConstant.webPageLoadingMaxTime);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}finally{
						runOnUiThread(new Runnable(){
							public void run(){
								//	        					if(sleepCounter<2){
								if(noticeWebView.getProgress()<100) {	// 로딩 안되었다면
									// do what you want
									noticeWebView.stopLoading();			// 멈추고
									hidePb();
									showErrMsg();					// 알림
									webPageLoaded = false;
								}
							}
						});
						nowLoading = false;			// 성공 여부를 떠나서 슬립이 모두 끝나면 재 로딩 가능하도록. 
					}
				}
			}).start();
		}
	}
	/**
	 * MyWebChromeClient
	 *  자바스크립트 alert 사용 위한 크롬 클라이언트이다
	 *
	 */
	private class MyWebChromeClient extends WebChromeClient {
		//Javascript alert 실행 가능함
		@Override
		public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
			final JsResult finalRes = result;
			//AlertDialog 생성
			new AlertDialog.Builder(view.getContext())
			.setMessage(message)
			.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
				public void onClick(DialogInterface dialog, int which) {
					finalRes.confirm(); 
				}
			})
			.setCancelable(false)
			.create()
			.show();
			return true;
		}
	}

	// 중앙 프로그래스바 보임, 숨김
	/**
	 * showPb
	 *  중앙 프로그래스바 가시화한다
	 *
	 * @param
	 * @param
	 * @return
	 */
	public void showPb(){
		new Thread( 
				new Runnable(){
					public void run(){
						Message message = handler .obtainMessage();
						Bundle b = new Bundle();
						b.putInt( "order" , 1);
						message.setData(b);
						handler .sendMessage(message);
					}
				}
		).start();
	}
	/**
	 * hidePb
	 *  중앙 프로그래스바 비가시화한다
	 *
	 * @param
	 * @param
	 * @return
	 */
	public void hidePb(){
		new Thread(
				new Runnable(){
					public void run(){
						Message message = handler .obtainMessage();
						Bundle b = new Bundle();
						b.putInt( "order" , 2);
						message.setData(b);
						handler .sendMessage(message);
					}
				}
		).start();
	}
	/**
	 * showErrMsg
	 *  화면에 error 토스트 띄운다
	 *
	 * @param
	 * @param
	 * @return
	 */
	public void showErrMsg(){			// 화면에 error 토스트 띄움..
		new Thread(
				new Runnable(){
					public void run(){
						Message message = handler.obtainMessage();				
						Bundle b = new Bundle();
						b.putInt("showErrToast", 1);
						message.setData(b);
						handler.sendMessage(message);
					}
				}
		).start();
	} 

	/*
	 *  닫기 버튼 2번 누르면 종료 됨.(non-Javadoc)
	 * @see android.app.Activity#onBackPressed()
	 */
	/**
	 * onBackPressed
	 *  닫기 버튼 2번 누르면 종료한다
	 *
	 * @param
	 * @param
	 * @return
	 */
	@Override
	public void onBackPressed() {
		Log.i("MainTabActivity", "finish");		
		if(app_end == 1){
			finish();
		}else{
			app_end = 1;
			Toast.makeText(MainNotice.this, R.string.noti_back_finish, Toast.LENGTH_SHORT).show();
			new Thread( 
					new Runnable(){
						public void run(){
							try {
								Thread.sleep(3000);			// 3초안에 다시 누르면 종료.
								app_end = 0;
							} catch (InterruptedException e) {e.printStackTrace();}
						}
					}
			).start();
		}
	}


	/**
	 * onPause
	 *  액티비티 pause 시 웹뷰 재로드 가능하게 한다
	 *
	 * @param
	 * @param
	 * @return
	 */
	@Override
	public void onPause(){
		webPageLoaded = false;			// 재로드 가능
		super.onPause();
	}


}
